package CDB;

import Negocios.ControlPermissions;
;
import java.util.Iterator;
import java.util.List;
import javax.swing.table.AbstractTableModel;

/**
 *
 * @author lightemp
 */


public class TableModelSD extends AbstractTableModel {

    private String[] headersEmployee = {"Clave", "Nombre", "Direccion", "Telefono",
        "Fecha de contratacion", "Permiso"};
    private String[] headersProduct = {"Clave", "Nombre", "Presentacion", "Consumo", "Categoria",
        "Subcategoria", "stock", "Precio"};
    private String[] headersProvider = {"Clave", "Nombre", "Direccion",
        "Telefono", "Email"};
    private String[] headersStock = {"Clave", "Nombre", "Cantidad", "Minimo",
        "Precio a granel", "Proveedor"};
    private String[] headersCategory = {"Clave", "Nombre"};
    private String[] headersSubCategory = {"Clave", "Nombre"};
    private String[] headersSalesDetail = {"Clave", "Producto", "Precio"};
    private String[] headersSales = {"Clave", "Empleado", "Fecha", "Total de Venta"};
    private String[] headersPermisos = {"Clave", "Empleado", "Punto de venta", "Respaldar BD", "Restaurar DB",
        "Alta producto", "Eliminar/Editar producto", "Alta proveedor", "Eliminar/Editar proveedor",
        "Alta empleado", "Eliminar/Editar empleado", "Reporte ventas", "Reporte inventario",
        "Catalogo productos", "Catalogo empleados", "Catalogo proveedores", "Catalogo Stock",
        "Catalogo Categorias", "Catalogo Subcategorias", "Catalogo permisos", "Reporte productos",
        "Reporte empleados", "Alta categoria", "Eliminar categoria", "Alta Subcategoria",
        "Eliminar Subcategoria", "Corte de caja", "Devoluciones"};
    public Object[][] tableModel;   // matriz tipo objeto que contredra los datos. 
    public String nameTable = null;
    private String headers[] = null;

    public TableModelSD(String nameTable, List registrosConsulta) {
        this.nameTable = nameTable;
        getColumnNames();
        this.fillTableModel(registrosConsulta);
    }

    @Override
    public int getRowCount() {
        return tableModel.length;
    }

    @Override
    public int getColumnCount() {
        return headers.length;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        return tableModel[rowIndex][columnIndex];
    }

    @Override
    public String getColumnName(int column) {
        return headers[column];
    }

    public Class getColumnClass(int fila, int col) {
        return tableModel[fila][col].getClass();

    }

    private String[] getColumnNames() {
        switch (nameTable) {
            case "Empleados":
                headers = headersEmployee;
                break;
            case "Productos":
                headers = headersProduct;
                break;
            case "Proveedores":
                headers = headersProvider;
                break;
            case "Stock":
                headers = headersStock;
                break;
            case "Categorias":
                headers = headersCategory;
                break;
            case "Subcategorias":
                headers = headersSubCategory;
                break;
            case "Permisos":
                headers = headersPermisos;
                break;
            case "Ventas":
                headers = headersSales;
                break;
            case "DetallesVenta":
                headers = headersSalesDetail;
                break;
        }
        return headers;
    }

    private void fillTableModel(List registrosConsulta) {
        Iterator it = registrosConsulta.iterator();
        int contFila = 0, contCol = 0, numColumnas = 0;
        try {
            numColumnas = getColumnCount();
        } catch (Exception e) {
            throw e;
        }

        tableModel = new Object[registrosConsulta.size()][numColumnas];
        try {
            switch (nameTable) {
                case "Empleados":
                    while (it.hasNext()) {
                        while (contCol < numColumnas && it.hasNext()) {
                            Empleados emp = (Empleados) it.next();
                            tableModel[contFila][contCol] = emp.getIdempleado();
                            contCol++;
                            tableModel[contFila][contCol] = emp.getNombre();
                            contCol++;
                            tableModel[contFila][contCol] = emp.getDireccion();
                            contCol++;
                            tableModel[contFila][contCol] = emp.getTelefono();
                            contCol++;
                            tableModel[contFila][contCol] = emp.getFechacontratacion();
                            contCol++;
                            //--------------------- PERMISOS----------------------
                            ControlPermissions cp = new ControlPermissions();
                            Permisos per = (Permisos) cp.selectOne(emp.getIdempleado());
                            //--------------------------------------------------
                            tableModel[contFila][contCol] = "Clave - " + per.getIdpermisos();
                            contCol++;
                        }
                        contCol = 0;
                        contFila++;
                    }
                    break;
                case "Productos":
                    while (it.hasNext()) {
                        while (contCol < numColumnas && it.hasNext()) {
                            Detalleproducto detpro = (Detalleproducto) it.next();
                            tableModel[contFila][contCol] = detpro.getIddetalleproducto();
                            contCol++;
                            tableModel[contFila][contCol] = detpro.getProducto().getNombre();
                            contCol++;
                            tableModel[contFila][contCol] = detpro.getTipo();
                            contCol++;
                            tableModel[contFila][contCol] = detpro.getConsumo();
                            contCol++;
                            tableModel[contFila][contCol] = detpro.getProducto().getCategorias().getNombre();
                            contCol++;
                            if (detpro.getSubcategoria() != null) {
                                tableModel[contFila][contCol] = detpro.getSubcategoria().getNombre();
                            } else {
                                tableModel[contFila][contCol] = "-";
                            }
                            contCol++;
                            tableModel[contFila][contCol] = detpro.getProducto().getStock().getNombre();
                            contCol++;
                            tableModel[contFila][contCol] = detpro.getCosto();
                            contCol++;
                        }
                        contCol = 0;
                        contFila++;
                    }
                    break;
                case "Proveedores":
                    while (it.hasNext()) {
                        while (contCol < numColumnas && it.hasNext()) {
                            Proveedores pro = (Proveedores) it.next();
                            tableModel[contFila][contCol] = pro.getIdproveedor();
                            contCol++;
                            tableModel[contFila][contCol] = pro.getNombre();
                            contCol++;
                            tableModel[contFila][contCol] = pro.getDireccion();
                            contCol++;
                            tableModel[contFila][contCol] = pro.getTelefono();
                            contCol++;
                            tableModel[contFila][contCol] = pro.getEmail();
                            contCol++;
                        }
                        contCol = 0;
                        contFila++;
                    }
                    break;
                case "Stock":
                    while (it.hasNext()) {
                        while (contCol < numColumnas && it.hasNext()) {
                            Stock stock = (Stock) it.next();
                            tableModel[contFila][contCol] = stock.getIdstock();
                            contCol++;
                            tableModel[contFila][contCol] = stock.getNombre();
                            contCol++;
                            tableModel[contFila][contCol] = stock.getCantidad();
                            contCol++;
                            tableModel[contFila][contCol] = stock.getMinimo();
                            contCol++;
                            tableModel[contFila][contCol] = stock.getPreciogranel();
                            contCol++;
                            tableModel[contFila][contCol] = stock.getProveedores().getNombre();
                            contCol++;
                        }
                        contCol = 0;
                        contFila++;
                    }
                    break;
                case "Categorias":
                    while (it.hasNext()) {
                        while (contCol < numColumnas && it.hasNext()) {
                            Categorias cat = (Categorias) it.next();
                            tableModel[contFila][contCol] = cat.getIdcategoria();
                            contCol++;
                            tableModel[contFila][contCol] = cat.getNombre();
                            contCol++;
                        }
                        contCol = 0;
                        contFila++;
                    }
                    break;
                case "Subcategorias":
                    while (it.hasNext()) {
                        while (contCol < numColumnas && it.hasNext()) {
                            Subcategoria sub = (Subcategoria) it.next();
                            tableModel[contFila][contCol] = sub.getIdsubcategoria();
                            contCol++;
                            tableModel[contFila][contCol] = sub.getNombre();
                            contCol++;
                        }
                        contCol = 0;
                        contFila++;
                    }
                    break;
                case "Permisos":
                    while (it.hasNext()) {
                        while (contCol < numColumnas && it.hasNext()) {
                            Permisos per = (Permisos) it.next();
                            tableModel[contFila][contCol] = per.getIdpermisos();
                            contCol++;
                            tableModel[contFila][contCol] = per.getEmpleados().getNombre();
                            contCol++;
                            tableModel[contFila][contCol] = respondeSioNo(per.isPuntoventa());
                            contCol++;
                            tableModel[contFila][contCol] = respondeSioNo(per.isRepaldodb());
                            contCol++;
                            tableModel[contFila][contCol] = respondeSioNo(per.isRestaurardb());
                            contCol++;
                            tableModel[contFila][contCol] = respondeSioNo(per.isAltaproducto());
                            contCol++;
                            tableModel[contFila][contCol] = respondeSioNo(per.isElimeditproducto());
                            contCol++;
                            tableModel[contFila][contCol] = respondeSioNo(per.isAltaproveedor());
                            contCol++;
                            tableModel[contFila][contCol] = respondeSioNo(per.isElimeditproveedor());
                            contCol++;
                            tableModel[contFila][contCol] = respondeSioNo(per.isAltaempleado());
                            contCol++;
                            tableModel[contFila][contCol] = respondeSioNo(per.isElimeditempleado());
                            contCol++;
                            tableModel[contFila][contCol] = respondeSioNo(per.isReporteventas());
                            contCol++;
                            tableModel[contFila][contCol] = respondeSioNo(per.isReporteinventario());
                            contCol++;
                            tableModel[contFila][contCol] = respondeSioNo(per.isCatalogoproductos());
                            contCol++;
                            tableModel[contFila][contCol] = respondeSioNo(per.isCatalogoempleados());
                            contCol++;
                            tableModel[contFila][contCol] = respondeSioNo(per.isCatalogoproveedor());
                            contCol++;
                            tableModel[contFila][contCol] = respondeSioNo(per.isCatalogostock());
                            contCol++;
                            tableModel[contFila][contCol] = respondeSioNo(per.isCatalogocategorias());
                            contCol++;
                            tableModel[contFila][contCol] = respondeSioNo(per.isCatalogosubcategorias());
                            contCol++;
                            tableModel[contFila][contCol] = respondeSioNo(per.isCatalogopermisos());
                            contCol++;
                            tableModel[contFila][contCol] = respondeSioNo(per.isReporteproductos());
                            contCol++;
                            tableModel[contFila][contCol] = respondeSioNo(per.isReporteempleados());
                            contCol++;
                            tableModel[contFila][contCol] = respondeSioNo(per.isAltacategoria());
                            contCol++;
                            tableModel[contFila][contCol] = respondeSioNo(per.isElimcategoria());
                            contCol++;
                            tableModel[contFila][contCol] = respondeSioNo(per.isAltasubcategoria());
                            contCol++;
                            tableModel[contFila][contCol] = respondeSioNo(per.isElimsubcategoria());
                            contCol++;
                            tableModel[contFila][contCol] = respondeSioNo(per.isCortedecaja());
                            contCol++;
                            tableModel[contFila][contCol] = respondeSioNo(per.isDevoluciones());
                            contCol++;
                        }
                        contCol = 0;
                        contFila++;
                    }
                    break;
                case "DetallesVenta":
                    while (it.hasNext()) {
                        while (contCol < numColumnas && it.hasNext()) {
                            Detalleventa detalle = (Detalleventa) it.next();
                            tableModel[contFila][contCol] = detalle.getIddetalleventa();
                            contCol++;
                            tableModel[contFila][contCol] = detalle.getProducto().getNombre();
                            contCol++;
                            tableModel[contFila][contCol] = detalle.getDetalleproducto().getCosto();
                            contCol++;
                        }
                        contCol = 0;
                        contFila++;
                    }
                    break;
                case "Ventas":
                    while (it.hasNext()) {
                        while (contCol < numColumnas && it.hasNext()) {
                            Ventas venta = (Ventas) it.next();
                            tableModel[contFila][contCol] = venta.getIdventa();
                            contCol++;
                            tableModel[contFila][contCol] = venta.getEmpleados().getNombre();
                            contCol++;
                            tableModel[contFila][contCol] = venta.getFecha();
                            contCol++;
                            tableModel[contFila][contCol] = venta.getTotalventa();
                            contCol++;
                        }
                        contCol = 0;
                        contFila++;
                    }
                    break;
            }
        } catch (Exception e) {
            throw e;
        }
    }

    public String respondeSioNo(boolean valor) {
        String respuesta = null;
        if (valor) {
            respuesta = "Si";
        } else {
            respuesta = "No";
        }
        return respuesta;
    }
}
